main() {
  //创建一个长度固定的字符串集合，此集合长度不可修改
  List<String> list = List<String>.filled(5, "");
  print(list);

  //创建一个可变长度的整数集合，
  var list2 = <int>[1, 2, 3, 4, 5];

  var l = [1,2,3];
  list2.add(6);
  print(list2);

  //集合操作
  list[0] = "a";
  list[1] = "abc";
  list[2] = "abcdef";
  list[3] = "abcdefg";
  var newList = list.where((value) {
    return value.length > 3;
  });
  print("新的集合数据$newList");

  var f = list.any((value) {
    //只要集合里面有满足条件的就返回true
    return value == "a";
  });
  print("是否有该值$f");

  var e = list.every((value) {
    //每一个都满足条件返回true 否则false
    return value.length > 5;
  });
  print("是否都满足条件$e");

  //创建一个map集合
  Map map = {
    "name": "小李",
    "age": 19,
    "work": ['敲代码', '送外卖']
  };
  print(map);
  print(map['name']); //输入map集合中key对应的value
  map['age'] = 22; //给map赋值
  print(map);

  int? a;
  int? b;
  //a?? = 10; //报错
  b ??= 23;
  b = 3;
  print(b);

  getInfo('孙悟空');
  getInfo('孙悟空', '女');
  getInfo('孙悟空', '女', 6);
  print('====================');
  getInfo2('猪八戒');
  getInfo2('猪八戒', '女');
  getInfo2('猪八戒', '女', 6);
  print('====================');
  getInfo3('沙和尚');
  getInfo3('沙和尚', sex: '男');
  getInfo3('沙和尚', sex: '男', age: 20);

  print('====================');
  getInfo4('唐僧');
  getInfo4('唐僧', sex: '男');
  getInfo4('唐僧', sex: '男', age: 20);

  fn();
}

//可变参数的方法
void getInfo(String username, [String? sex, int? age]) {
  print('用户信息:$username ,sex: $sex ,age: $age');
}

//带默认参数的方法
void getInfo2(String username, [String sex = '男', int? age = 18]) {
  print('用户信息:$username ,sex: $sex ,age: $age');
}

//
void getInfo3(String name, {String? sex, int? age}) {
  print('用户信息:$name ,sex: $sex ,age: $age');
}

void getInfo4(String name, {String sex = '女', int? age = 10}) {
  print('用户信息:$name ,sex: $sex ,age: $age');
}


//匿名方法
var fn = () {
  print('我是匿名方法');
};